#!/bin/bash

# =============================================================================
# Fedora Workstation 42 开发环境自动化配置脚本
# 功能：安装 Java、Node.js、Rust、Git、VS Code、Docker 等开发工具与环境
# 使用方法：chmod +x fedora-dev-setup.sh && ./fedora-dev-setup.sh
# 注意：请在已配置好网络和基础系统的 Fedora 上运行（建议先运行系统初始化脚本）
# =============================================================================

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 无颜色

# 打印信息函数
print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否以普通用户运行（避免 root 直接执行）
check_user() {
    if [ "$EUID" -eq 0 ]; then
        print_error "请不要以 root 用户运行此脚本！"
        print_info "脚本会通过 sudo 自动提权执行需要的操作。"
        exit 1
    fi
}

# 安装基础开发工具
install_dev_base() {
    print_info "开始安装基础开发工具（编译器、构建工具、调试器）..."
    # development-tools 是一个预定义的软件包组，包含一组常用的开发工具和库，用于支持软件开发工作。例如：git
    # c-development 是简化C开发环境配置的包组，安装后即可获得编译、调试和构建C程序所需的核心工具。如果你需要开发C程序，安装它或对应的包组是第一步。例如：gcc、gcc-c++
    # rpm-development-tools	是专门用于 RPM 包开发 的工具集，适合软件打包、维护或发布 RPM 格式的软件。例如：rpm-build、rpmdevtools
    # multimedia 包组提供了一套完整的音视频处理工具链，适合普通用户或开发者处理多媒体任务。例如：gstreamer1-plugin-*
    sudo dnf group install -y development-tools c-development rpm-development-tools
    # dnf group install 旨在为开发者提供一个基础的开发环境，而无需手动安装每个工具。
    # dnf group list			# 查看可用的软件包组
    # dnf group info development-tools	# 查看软件包组的信息
    # dnf group info c-development		# 查看软件包组的信息

    print_info "开始安装 Tauri 2 运行环境依赖包..."
    # 安装 Tauri 2 运行环境依赖包	https://v2.tauri.app/zh-cn/start/prerequisites/#linux
    sudo dnf check-update
    sudo dnf install -y webkit2gtk4.1-devel \
      openssl-devel \
      curl \
      wget \
      file \
      libappindicator-gtk3-devel \
      librsvg2-devel \
      libxdo-devel

    print_success "基础开发工具（编译器、构建工具、调试器）安装完成！"
}

# 配置 Git（基础用户信息）
install_and_configure_git() {
    print_info "开始安装 Git..."
    # Git（通常已预装，但确保安装）
    sudo dnf install -y git
    print_success "Git 安装完成！"

    print_info "正在配置 Git 用户信息..."

    # 如果尚未设置，则提示用户输入（或使用默认值）
    if ! git config --global user.name &> /dev/null; then
        read -p "请输入你的 Git 用户名（例如：Your Name）: " git_name
        git config --global user.name "$git_name"
        # git config --global user.name 'lcqh2635' 
    fi

    if ! git config --global user.email &> /dev/null; then
        read -p "请输入你的 Git 邮箱（例如：you@example.com）: " git_email
        git config --global user.email "$git_email"
        # git config --global user.email '2320391937@qq.com'
    fi

    # ssh-keygen -t rsa -b 4096 -C "2320391937@qq.com"
    # 需要安装 wl-clipboard 工具
    # cat ~/.ssh/id_rsa.pub | wl-copy
    # 配置 Gitee 密钥	https://gitee.com/profile/sshkeys
    # 配置 Github 密钥	https://github.com/settings/keys

    # 启用颜色输出
    # git config --global color.ui auto

    # 设置默认分支名为 main（可选）
    # git config --global init.defaultBranch main

    print_success "Git 配置完成！"
}

# 安装 Node.js 和 npm（使用官方仓库）
install_nodejs() {
    print_info "正在安装 Node.js 和 npm..."

    # 默认安装最新 LTS 版本
    sudo dnf install -y nodejs pnpm

    # 验证安装
    if command -v node &> /dev/null && command -v npm &> /dev/null; then
        node_ver=$(node -v)
        npm_ver=$(npm -v)
        print_success "Node.js 安装成功：$node_ver，npm：$npm_ver"
    else
        print_error "Node.js 安装失败！"
    fi

    # （可选）配置 npm 国内镜像加速
    print_info "正在配置 npm 使用淘宝镜像源（加速包下载）..."
    npm config set registry https://registry.npmmirror.com
    # npm config get registry
    pnpm config set registry https://registry.npmmirror.com/
    # pnpm config get registry
    print_success "npm 镜像源已切换为 npmmirror.com（原淘宝 NPM 镜像）"

    # 安装 Bun
    print_info "正在安装 Bun..."
    sudo npm install -g bun
    bun_ver=$(bun -v)
    print_success "Bun 安装完成：$bun_ver"

    # bun run config --help
    # bun --config
    # 将 bunfig.toml 作为隐藏文件添加到用户主目录 https://www.bunjs.cn/docs/runtime/bunfig
    cat > ~/.bunfig.toml <<EOF
[install]    
# 使用阿里云加速仓库，仓库地址可从阿里云官方获取，地址为 https://developer.aliyun.com/mirror/NPM
registry = "https://registry.npmmirror.com"
EOF
    # cat ~/.bunfig.toml
    # which node
    # whereis node
    # whereis bun
    # 将 IDEA 的 JS/TS 默认运行时环境从 nodejs 改为 bun 操作如下：
    # 1、设置 -> 语言和框架 -> Bun -> /usr/local/bin/bun
    # 2、设置 -> 语言和框架 -> Node.js -> Node解释器 -> /usr/local/bin/bun
}

# 安装 SDKMAN! 并通过它安装 Java、Maven、Gradle 等开发工具
install_sdkman() {
    print_info "正在安装 SDKMAN!（开发工具版本管理器）..."

    # 检查是否已安装 SDKMAN!
    if [ -d "$HOME/.sdkman" ]; then
        print_info "SDKMAN! 已安装，将重新安装。"
        rm -rf $HOME/.sdkman
        curl -s "https://get.sdkman.io" | bash
    else
        # 安装 SDKMAN!（官方推荐方式）
        curl -s "https://get.sdkman.io" | bash
    fi

    # 使 SDKMAN! 在当前 shell 生效
    source "$HOME/.sdkman/bin/sdkman-init.sh"

    print_success "SDKMAN! 安装完成！版本号为： $(sdk version)"

    # ========================
    # 配置 SDKMAN! 代理（可选但推荐） https://github.com/sdkman/sdkman-cli/discussions/1191
    # ========================

    # ========================
    # 安装 Java（通过 SDKMAN!）
    # ========================
    print_info "正在通过 SDKMAN! 安装 Java（LTS 版本）..."

    # 列出可用的 Java LTS 版本（如 17、21）
    # 这里选择最新的 OpenJDK 21（可按需修改）
    # 默认安装 Temurin(Eclipse) 的最新稳定版 Java，例如：21.0.8-tem
    sdk install java

    if command -v java &> /dev/null; then
        java_ver=$(java -version 2>&1 | head -n 1)
        print_success "Java 通过 SDKMAN! 安装成功：$java_ver"
    else
        print_error "Java 安装失败！"
    fi

    # ========================
    # 安装 Maven
    # ========================
    print_info "正在通过 SDKMAN! 安装 Maven..."
    sdk install maven
    sdk install mvnd
    if command -v mvn &> /dev/null && command -v mvnd &> /dev/null; then
        mvn_ver=$(mvn -v | head -n 1)
        mvnd_ver=$(mvnd -v)
        print_success "Maven 安装成功：$mvn_ver，mvnd：$mvnd_ver"
    else
        print_error "Maven 安装失败！"
    fi

    # ========================
    # 安装 Gradle
    # ========================
    print_info "正在通过 SDKMAN! 安装 Gradle..."
    sdk install gradle
    if command -v gradle &> /dev/null; then
        gradle_ver=$(gradle -v | head -n 2 | tail -n 1)
        print_success "Gradle 安装成功：$gradle_ver"
    else
        print_error "Gradle 安装失败！"
    fi

    # ========================
    # （可选）安装其他工具，例如：kotlin、springboot 等
    # ========================
    # sdk install kotlin
    # sdk install springboot

    print_success "SDKMAN! 已完成 Java、Maven、Gradle 的安装与配置！"
}

# 安装 Rust 编程语言
install_rust() {
    print_info "正在安装 Rust..."

    # 检查是否已安装
    if command -v rustc &> /dev/null; then
        print_info "Rust 已安装，跳过安装步骤。"
        return 0
    fi

    # 配置 rustup 使用中国科学技术大学（USTC）的镜像源，从而 加速 Rust 工具链（如 rustc、cargo）的下载和更新。
    # 配置 Rust Toolchain 反向代理 	https://mirrors.ustc.edu.cn/help/rust-static.html
    # 指定 Rust 工具链和组件的下载地址（如 rustc,cargo,rust-std 等）
    echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> ~/.bash_profile
    # 指定 rustup 自身更新元数据的地址（即 rustup 如何检查自身版本、下载新版本）
    echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> ~/.bash_profile
    source ~/.bash_profile
    # 用 shell 执行从标准输入来的脚本，并把 -y 作为参数传给那个脚本，告诉它：自动安装，不要问我！”
    # “自动确认所有提示，使用默认设置安装”（相当于 “yes”）
    # 使用官方 rustup 脚本安装
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

    # 将 Rust 工具链加入环境变量（对当前 shell 生效）
    source "$HOME/.cargo/env"


    # 验证安装
    if command -v rustc &> /dev/null; then
        rust_ver=$(rustc --version)
        print_success "Rust 安装成功：$rust_ver"
    else
        print_error "Rust 安装失败！"
    fi

    # （可选）配置 Rust 国内镜像源（加速 crates.io）
    mkdir -p ~/.cargo
    cat > ~/.cargo/config.toml <<EOF
# 配置 Cargo 国内加速镜像源，可选：ustc、tuna、sjtu、aliyun
[source.crates-io]
replace-with = 'ustc'

# 中国科学技术大学镜像 https://mirrors.ustc.edu.cn/help/crates.io-index.html
[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"
[registries.ustc]
index = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

# 阿里云镜像
# 使用稀疏协议（sparse）减少元数据下载量，大幅加速
[source.aliyun]
registry = "sparse+https://mirrors.aliyun.com/crates.io-index/"
[registries.aliyun]
index = "sparse+https://mirrors.aliyun.com/crates.io-index/"
EOF

    print_success "Rust crates.io 镜像已配置为 ustc（国内加速）"
}

# 安装 Golang 编程语言
install_golang() {
    print_info "正在安装 Golang..."

    # 检查是否已安装
    if command -v go &> /dev/null; then
        print_info "Golang 已安装，跳过安装步骤。"
        return 0
    fi

    # 安装 golang	https://learnku.com/go/wikis/38122
    # golang 中文学习文档 https://golang.halfiisland.com/
    # golang 官方网站 https://golang.google.cn/
    # golang 公共软件包仓库 https://pkg.go.dev/

    # 使用官方 Golang 脚本安装
    sudo dnf install -y golang

    # 验证安装
    if command -v go &> /dev/null; then
        go_ver=$(go version)
        print_success "Golang 安装成功：$go_ver"
    else
        print_error "Golang 安装失败！"
    fi

    # 配置 Golang 国内镜像源
    # 启用 Go Modules 功能
    go env -w GO111MODULE=on
    go env -w GOSUMDB=sum.golang.google.cn
    # 阿里云
    go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
    # 查看配置是否成功
    # go env | grep GOPROXY
    # 设置 GOPATH 为 ~/go
    mkdir -p $HOME/.go
    go env -w GOPATH=$HOME/.go
    # 查看当前环境
    # go env GOPATH GOMODCACHE

    print_success "Golang已配置为 https://mirrors.aliyun.com/goproxy/,direct（国内加速）"
}

# 安装常用开发工具
install_dev_tools() {
    print_info "正在安装常用开发工具..."
    
    # 配置 Zed 参考官网 https://zed.rust-lang.net.cn/docs/configuring-zed
    flatpak install flathub dev.zed.Zed -y
    flatpak install flathub cn.apipost.apipost -y

    # 配置 IDEA 标签页多行显示，Settings + Editor → General → Editor Tabs
    # ============================
    # 2. 安装 JetBrains 代码编辑器
    # 启用 JetBrains 第三方优质用户库	https://copr.fedorainfracloud.org
    # https://copr.fedorainfracloud.org/coprs/medzik/jetbrains/
    sudo dnf copr enable medzik/jetbrains
    # 安装 JetBrains 代码编辑器
    sudo dnf install -y intellij-idea-ultimate
    # sudo dnf install -y goland webstorm rustrover datagrip pycharm-professional
    # sudo dnf install -y clion
    # sudo dnf install -y jetbrains-fleet

    # 关于 tauri android 应用环境搭建 https://tauri.app/zh-cn/start/prerequisites/#android
    # 下载并安装 Android Studio
    # sudo dnf install -y android-studio

    # 下载  jetbra.zip 以及获取 JetBrains 软件激活码
    # https://3.jetbra.in/
    # https://ipfs.io/ipfs/bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i/
    # https://bafybeih65no5dklpqfe346wyeiak6wzemv5d7z2ya7nssdgwdz4xrmdu6i.ipfs.dweb.link/
    cd ~/下载
    if [ ! -d ~/下载/init-fedora ]; then
        print_info "正在克隆 init-fedora 项目..."
        git clone https://gitee.com/lcqh2635/init-fedora.git
    fi
    cd init-fedora
    unzip jetbra.zip
    mv jetbra ~/.jetbra
    
    # ls ~/.config/JetBrains
    # cat ~/.config/JetBrains/IntelliJIdea*/idea64.vmoptions
    # 为 IntelliJIdea 配置虚拟机参数
    # 创建文件（如果不存在）

    cat > ~/.config/JetBrains/IntelliJIdea*/idea64.vmoptions <<EOF
 # custom IntelliJ IDEA VM options (expand/override 'bin/idea64.vmoptions')
-Xms2g
-Xmx8g
-XX:ReservedCodeCacheSize=1g
-XX:+UseZGC
-XX:MaxMetaspaceSize=1g
-XX:+AlwaysPreTouch
-Dfile.encoding=UTF-8
-Duser.language=zh
-Djdk.attach.allowAttachSelf=true
-Dawt.useSystemAAFontSettings=lcd
-Dsun.io.useCanonCaches=true
--add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
--add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
-javaagent:/home/lcqh/.jetbra/ja-netfilter.jar=jetbrains
EOF

    podman_ver=$(podman --version)
    podman_compose_ver=$(podman-compose --version)
    # Podman（推荐使用官方 Docker Engine）
    if ! command -v podman &> /dev/null; then
        print_info "正在安装 Podman..."
        sudo dnf install -y podman podman-compose
        print_success "podman 安装成功：$podman_ver，podman-compose：$podman_compose_ver"
    else
        sudo dnf install -y podman-compose
        print_success "podman 默认已经安装：$podman_ver，podman-compose：$podman_compose_ver"
    fi
    

# 启用用户级 socket
systemctl --user enable --now podman.socket
systemctl --user status podman
# https://github.com/containers/podman/blob/cea9340242f3f6cf41f20fb0b6239aa3db5decd6/docs/tutorials/socket_activation.md
# cat /usr/lib/systemd/user/podman.socket
# ls $XDG_RUNTIME_DIR/podman/podman.sock
# unix:///run/user/1000/podman/podman.sock
# podman info

sudo flatpak install flathub com.github.marhkb.Pods -y
# 打开 Pods 软件，点击 “新建连接” 然后选择使用默认的 “Unix Socket” 点击 Connect
# IDEA 连接 Podman：按 Ctrl+Alt+S 打开设置，然后选择 构建、执行、部署 | Docker。点击 "添加"按钮 以添加 Docker 配置。选择 Unix 套接字 ，然后下拉选择 rootless 版地址
    
    

    # 主要用于 登录到容器镜像仓库（Registry），以便拉取（pull）私有镜像或推送（push）镜像到仓库。
    # lcqh2635@gmail.com
    # podman login
    # 配置国内加速镜像仓库
    # cat /etc/containers/registries.conf
    # 备份到同目录（添加 .bak 后缀）
    sudo cp /etc/containers/registries.conf{,.bak}
    # 检查 .bak 文件是否存在
    # ls -l /etc/containers
    # 从同目录 .bak 文件恢复
    # sudo cp /etc/containers/registries.conf{.bak,}

sudo bash -c 'cat <<EOF >> /etc/containers/registries.conf

# 定义未指定镜像仓库前缀时，默认搜索的镜像仓库列表
# 例如执行 "podman pull nginx" 会自动从 "docker.io" 查找 "library/nginx"
unqualified-search-registries = ["docker.io"]

# Podman 优先尝试从 registry.mirror 拉取镜像，如果加速器不可用/镜像不存在，则自动回退到 location 指定的官方地址
# 官方仓库地址（最终回退地址）
[[registry]]
# 匹配的镜像仓库前缀（支持通配符 *）
# 例如 "docker.io" 会匹配所有 "docker.io/xxx" 的镜像
prefix = "docker.io"
# 实际访问的仓库服务器地址
# Docker Hub 的官方注册表地址
location = "registry-1.docker.io"

# 镜像加速器地址（优先使用的镜像源）
# 添加该仓库的镜像加速器（Mirror）以阿里云镜像加速为示例
[[registry.mirror]]
# 镜像加速器地址（替换为你的阿里云镜像加速URL）
location = "docker.1ms.run"
# 是否允许不安全的 HTTP 连接（生产环境建议 false）
insecure = false
EOF'

    
# 1. 创建网络
podman network create podman-net

# 运行 Redis 容器并启用密码认证（增强安全性）
# podman stop redis && podman rm redis
podman run -d \
  --name redis \
  --network podman-net \
  -p 6379:6379 \
  redis:latest redis-server --requirepass "479368"
# 使用 redis-cli 连接：
# podman exec -it redis redis-cli -a 479368

# 拉取官方 PostgreSQL 镜像并运行 PostgreSQL 容器
# podman stop postgres && podman rm postgres
podman run -d \
  --name postgres \
  --network podman-net \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=snail_job \
  -p 5432:5432 \
  postgres:latest
# 连接数据库（使用 psql 客户端）：
# podman exec -it postgres psql -U postgres -d test
cd ~/下载
git clone https://gitee.com/aizuda/snail-job.git
# 将脚本拷贝进容器，再在容器内执行（适用于 Podman/Docker）
# 将脚本复制到 postgres 容器中
podman cp ~/下载/snail-job/doc/sql/snail_job_postgre.sql postgres:/tmp/
# 在容器内执行
podman exec -i postgres psql -U postgres -d snail_job -f /tmp/snail_job_postgre.sql

cd ~/下载
curl -L -o nacos-server-3.1.0.tar.gz https://gh-proxy.com/https://github.com/alibaba/nacos/releases/download/3.1.0-bugfix/nacos-server-3.1.0.tar.gz
tar -zxvf nacos-server-3.1.0.tar.gz

# 2. 拉取官方 MySQL 镜像并运行 MySQL 容器
# podman stop mysql && podman rm mysql
podman run -d \
  --name mysql \
  --network podman-net \
  -e MYSQL_ROOT_PASSWORD=479368 \
  -e MYSQL_DATABASE=nacos_config \
  -e MYSQL_USER=lcqh2635 \
  -e MYSQL_PASSWORD=123456 \
  -p 3306:3306 \
  mysql:latest
# 将脚本拷贝进容器，再在容器内执行（适用于 Podman/Docker）
# 将脚本复制到 MySQL 容器中
podman cp ~/下载/nacos/conf/mysql-schema.sql mysql:/tmp/
# 在容器内执行导入
podman exec -it mysql mysql -u lcqh2635 -p nacos_config
USE nacos_config;
SOURCE /tmp/mysql-schema.sql;
EXIT;

# DROP TABLE IF EXISTS mysql_schema;

# 在 Fedora（或其他 Linux 发行版）上使用 Podman 时，有多种方式可以查看容器内部的文件目录结构
# 进入容器的交互式 shell（如果容器有 sh/bash）
podman exec -it <容器名或ID> /bin/sh
# 例如：
podman exec -it mysql /bin/bash
ls /
ls /tmp/

# 使用容器内 mysql 客户端连接：
# podman exec -it mysql mysql -u lcqh2635 -p

# 拉取官方镜像并启动 Nacos 容器（推荐 2.3+ 版本）：
# 3. 启动 Nacos，直接通过容器名访问 MySQL
# Nacos 端口配置可参考官方 issue https://github.com/nacos-group/nacos-docker/issues/453
# podman stop nacos && podman rm nacos
podman run -d \
  --name nacos \
  --network podman-net \
  -p 8080:8080 \
  -p 7848:7848 \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  -e MODE=standalone \
  -e SPRING_DATASOURCE_PLATFORM=mysql \
  -e MYSQL_SERVICE_HOST=mysql \
  -e MYSQL_SERVICE_PORT=3306 \
  -e MYSQL_SERVICE_DB_NAME=nacos_config \
  -e MYSQL_SERVICE_USER=lcqh2635 \
  -e MYSQL_SERVICE_PASSWORD=123456 \
  -e NACOS_AUTH_ENABLE=true \
  -e NACOS_AUTH_IDENTITY_KEY="nacos" \
  -e NACOS_AUTH_IDENTITY_VALUE="nacos" \
  -e NACOS_AUTH_TOKEN="K7vQ2mRf9ZxLpN8sT1aB3cD4eF5gH6jK7lM8nO9pQ0rS1tU2vW3xY4zA5bC6dE=" \
  nacos/nacos-server:latest
# http://localhost:8080/index.html
# 查看容器的完整日志
podman logs <容器名或ID>
# 示例
podman logs nacos

# https://snailjob.opensnail.com/docs/guide/server/service_deployment.html
podman run -d \
  --name snail-job \
  --network podman-net \
  -e SPRING_DATASOURCE_USERNAME=postgres \
  -e SPRING_DATASOURCE_PASSWORD=postgres \
  -e SPRING_DATASOURCE_URL='jdbc:postgresql://localhost:5432/snail_job' \
  -e SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver \
  -p 8081:8080 \
  -p 17888:17888 \
  opensnail/snail-job:latest
# http://localhost:8000/snail-job
用户名: admin
密码: admin

    # podman images
    # podman ps

    print_success "开发工具安装完成！"
}

# 主函数
main() {
    print_info "开始配置 Fedora 开发环境..."

    check_user
    install_dev_base
    install_and_configure_git
    install_nodejs
    install_sdkman
    install_rust
    install_golang
    install_dev_tools

    print_success "=========================================="
    print_success "🎉 开发环境配置完成！"
    print_success "以下环境已就绪："
    print_success "  • Java (OpenJDK 21)"
    print_success "  • Node.js (LTS) + npm（使用国内镜像）"
    print_success "  • Rust（使用 rsproxy.cn 镜像加速）"
    print_success "  • Git、VS Code、Docker、常用 CLI 工具"
    print_success "=========================================="

    print_warning "📌 注意："
    print_warning "  • Docker 权限变更需重新登录或执行 'newgrp docker'"
    print_warning "  • 新终端需重新加载 shell 配置（或重启终端）以使用 Java/Rust 环境变量"
    print_warning "  • VS Code 可通过应用菜单启动，或命令行输入 'code'"

    echo
    read -p "是否现在启动 VS Code 进行测试？(y/N): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        code --version &> /dev/null && code . || print_error "VS Code 启动失败，请手动启动。"
    fi
}

# 执行主流程
main "$@"
